// 这个文件里有四个类，用来描述代码运行中的三类错误，其中 RuntimeException 是基类。
// (1)RuntimeException类-运行时错误，基类，拥有 _message 私有属性和 message、name 两个只读属性，以及一个 toString 方法用来描述完整的错误信息。
// (2)IllegalStateException类-无效状态，name 只读属性重写为 'IllegalStateException'
// (3)InvalidArgumentException类-无效参数，name 只读属性重写为 'InvalidArgumentException'
// (4)NotImplementedException-未实现功能，name 只读属性重写为 'NotImplementedException'

// 核心就是 this.name + ': ' + this.message 这句代码。
export class RuntimeException {

    constructor(message) {
        this._message = message;
    }

    get name() {
        return 'RuntimeException';
    }

    get message() {
        return this._message;
    }

    toString() {
        return this.name + ': ' + this.message;
    }

}

export class IllegalStateException extends RuntimeException {

    constructor(message) {
        super(message);
    }

    get name() {
        return 'IllegalStateException';
    }

}

export class InvalidArgumentException extends RuntimeException {

    constructor(message) {
        super(message);
    }

    get name() {
        return 'InvalidArgumentException';
    }

}

export class NotImplementedException extends RuntimeException {

    constructor(message) {
        super(message);
    }

    get name() {
        return 'NotImplementedException';
    }

}
